#include<iostream>
#include<unistd.h>
#include<signal.h>
#include<cstdio>

using namespace std;

void Count(int cnt)//倒计时函数
{
    while(cnt)
    {
        printf("%2d\r",cnt);//\r 让光标回到行首
        fflush(stdout);//刷新缓冲区
        cnt--;
        sleep(1);
    }
    printf("\n");
}


void handler(int signo)//自定义的方法
{
    cout<<  "get signal : "<< signo << endl;
    Count(10);
}

int main()
{
    struct sigaction act , oact; //分别记录新方法和老方法
    act.sa_handler = handler;
    act.sa_flags = 0;
    sigemptyset(&act.sa_mask);//当我们正在处理某一种信号的时候，我们也想顺便屏蔽其他信号，就可以添加到这个sa_mask中
    sigaddset(&act.sa_mask,3);//向信号集（sigset_t）sa_mask 中添加特定的信号3
    sigaction(SIGINT , &act , &oact);
    //等价于signal(SIGINT , handler)   不同的是没有保留老的方法

    while(true) sleep(1);

    return 0;
}